package com.bw.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bw.entity.User;
import com.bw.mapper.UserMapper;
import org.spring.kun.common.GiteeUtils;
import org.spring.kun.common.Md5Utils;
import org.spring.kun.common.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;
import java.util.UUID;

@Controller
public class GiteeController {

    @Autowired
    UserMapper userMapper;

    @RequestMapping("/callbackCode.do")
    public String callback(String code, HttpServletResponse response, Model model) {
        System.out.println("接收到的临时授权码 " + code);
        // 根据 临时授权码获取 token
        String accessTokenByCode = GiteeUtils.getAccessTokenByCode(code);
        System.out.println("获取到的token" + accessTokenByCode);
        // 根据 token 获取 用户资源
        JSONObject userInfoByToken = GiteeUtils.getGiteeUserInfoByToken(accessTokenByCode);
        System.out.println("获取到的用户资源 " + JSON.toJSONString(userInfoByToken));

        // 获取到完整的用户信息  （只需要使用其中四个字段）
        // 把gitee数据库的name字段 当做咱们自己数据库用户表的昵称字段
        String nickName = userInfoByToken.getString("name");
        // 把gitee数据库的avatar_url字段 当做咱们自己数据库用户表的头像字段
        String avatarUrl = userInfoByToken.getString("avatar_url");
        // 把gitee数据库的id字段,  当做咱们数据库里的gitee_id字段
        Integer giteeId = userInfoByToken.getInteger("id");
        // 把gitee用户个人空间地址 ,  当做咱们数据库里用户名
        String name = userInfoByToken.getString("login");

        // 执行注册  判断一下 之前有没有注册过
        User userFromDB = userMapper.selectByName(name);
        if (userFromDB == null){
            User user = new User();
            user.setName(name);
            user.setNickName(nickName);
            user.setGiteeId(giteeId);
            user.setAvatarUrl(avatarUrl);
            // 给用户设置默认的密码
            String str = "123456";
            String salt = UUID.randomUUID().toString().substring(0, 8);
            String md5String = Md5Utils.getMD5String(str + salt);
            user.setSalt(salt);
            user.setPassword(md5String);
            userMapper.add(user);
            // 加密用户信息   得到token 把token放入cookie
            TokenUtils.responseTokenByCookie(user,response);
        }else {
                // 如果之前已经注册过  就刷新一下用户的昵称和头像
            userFromDB.setNickName(nickName);
            userFromDB.setAvatarUrl(avatarUrl);
            userMapper.updateById(userFromDB);

            // 加密用户信息   得到token 把token放入cookie
            TokenUtils.responseTokenByCookie(userFromDB,response);
        }
        model.addAttribute("nickName",nickName);
        model.addAttribute("avatarUrl",avatarUrl);

        return "success";
    }
}
